home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Software Contest 3 / FM Towns Software Contest 3.iso / exp / video_t / no1 / c_sorse / ptiff.c < prev    next >
Text File  |  1994-01-07  |  5KB  |  306 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <mos.h>
  4. #include <egb.h>
  5. #include <strings.h>
  6. #include <conio.h>
  7. #include <tifflib.h>
  8.  
  9. extern void print();
  10. extern     char    *guiEgbPtr ;
  11. extern    char    *getgraph;
  12.  
  13.  
  14. #define GETG         512    /* 画面取り込みバッファ */
  15.  
  16. int modet ;
  17.  
  18. extern     char *gwork;
  19.  
  20.  
  21. char mwork[4096];
  22. char palt[ 256*8+4 ] ;      /* パレット設定用 */
  23. char    fdata[100][160];    /*  ロードTIFF データ  */
  24. char    wdata2[100][160];    /*  セーブTIFF データ  */
  25. char    wzahyo[100][30];    /*  セーブTIFF データ  */
  26.  
  27. char    para[300];
  28. int    gwsize;
  29.  
  30. int    mx,my;        /*ヘッダ情報*/
  31. int    res;
  32. int bpp ;
  33. int comp,fill ;
  34. int    width,length  ;
  35. long strip, clut, dw ;
  36.  
  37. char    *gettiff;
  38. extern int menud;
  39.  
  40. int     page=0;
  41.  
  42.  
  43.     struct {
  44.         char *bp ;
  45.         short sel ;
  46.         short sx,sy,ex,ey ;
  47.     } p ;       /* EGB_putBlockのパラメータ */
  48.  
  49.     struct {
  50.         char *bp ;
  51.         short sel ;
  52.         short sx,sy,ex,ey ;
  53.     } gg ;       /* EGB_putBlockのパラメータ */
  54.  
  55.  
  56. /*     下請け関数群    */
  57.  
  58.  
  59. /* 画面モードの設定 */
  60. int setvmode()
  61. {
  62.     switch(bpp ) {
  63.     case 1:
  64.     case 4:
  65.         if(menud!=2)
  66.         {
  67.         gamen2();
  68.         }
  69.         break ;
  70.  
  71.     case 8:    
  72.         if(menud!=0)
  73.         {
  74.         gamen0();
  75.         }
  76.         break ;
  77.  
  78.     case 16:
  79.         if( width > 320 || length > 240 ) { /* high resolution 32k */
  80.             if (menud!=6)
  81.             {
  82.             gamen6();
  83.             }
  84.  
  85.         } else {
  86.          if(menud!=6 && menud!=1)
  87.             {
  88.             gamen1();
  89.             }
  90.         }
  91.         break ;
  92.  
  93.     default: return 0;
  94.     }
  95. return modet ;
  96. }
  97.  
  98.  
  99. void  err()
  100. {
  101. char    aaa[200];
  102. char    bbb[]="ERROR : ";
  103. strcat(aaa,bbb);
  104. _itoa(tiff_err,bbb,10);
  105. strcat(aaa,bbb);
  106. print(50,160,7,aaa);
  107. return;
  108. }
  109.  
  110. /*
  111.      load TIFF file 
  112.          TIFFローダメイン
  113. */
  114.  
  115. FILE *fp2 ;
  116. int getpict(work, gwsize, name)
  117. char *work;
  118. int gwsize ;
  119. char *name ;
  120. {
  121. if( (fp2 = fopen( name, "rb" )) == NULL )    return( -1 ) ;
  122. fread( gwork, 1, gwsize, fp2 ) ;   /* 最初のデータロード */
  123. fclose( fp2 ) ;
  124.     /* ヘッダの解析 */
  125. if( TIFF_getHead( gwork, gwsize ) < 0 )        err() ;
  126.     /* タグの内容のチェック */
  127. if( ( bpp = TIFF_checkMode( &width,&length,&comp,&fill,&strip,&clut )) < 0 )
  128.     err() ;
  129. if( bpp == 24 )    err() ;    /* このプログラムではフルカラーデータは扱わない */
  130.     modet = bpp ;
  131.  
  132. setvmode();
  133.  
  134. /* パレットの設定 */
  135. if( clut != 0 ) {
  136.    TIFF_getPal( palt ) ;
  137.    EGB_palette( work, 0, palt ) ;
  138.  }
  139.     res=bpp;
  140.     mx=width ;
  141.     my=length  ;
  142.  
  143. return 0 ;
  144. }
  145.  
  146.  
  147.  
  148. extern     void wait();
  149.  
  150. /* 展開されたものを表示する                             */
  151. /*    そのまま表示する場合は, EGB_putBlockを使えばよい */
  152. int    ss,xx,yy;    /*  座標  */
  153. int    ff;        /*  + - のフラグ */
  154. int printg()
  155. {
  156. ff=1;
  157. int    sss,xxx,yyy;
  158. do {
  159.     MOS_rdpos(&ss,&xx,&yy);
  160. xxx=xx;
  161. yyy=yy;
  162.     if(ff==1)
  163.     {
  164.         gg.bp = getgraph ;
  165.         gg.sel = 0x14 ;
  166.         gg.sx = xx ;
  167.         gg.ex = xx+mx ;
  168.         gg.sy = yy;
  169.         gg.ey = yy+my;
  170.         EGB_getBlock( guiEgbPtr , (char *)&gg ) ;
  171.  
  172.         p.bp = gwork+strip ;
  173.         p.sel = 0x14 ;
  174.         p.sx = xx ;
  175.         p.ex = xx+mx -1 ;
  176.         p.sy = yy;
  177.         p.ey = yy+my -1 ;
  178.     }
  179.     else
  180.     {
  181.         gg.bp = getgraph ;
  182.         gg.sel = 0x14 ;
  183.         gg.sx = xx-mx ;
  184.         gg.ex = xx;
  185.         gg.sy = yy-my;
  186.         gg.ey = yy;
  187.         EGB_getBlock(guiEgbPtr , (char *)&gg ) ;
  188.  
  189.         p.bp = gwork+strip ;
  190.         p.sel = 0x14 ;
  191.         p.sx = xx-mx ;
  192.         p.ex = xx -1 ;
  193.         p.sy = yy-my ;
  194.         p.ey = yy -1 ;
  195.     }
  196.  
  197.         if( modet == 1 ) 
  198.         {
  199.         EGB_putBlockColor(guiEgbPtr, 0, (char *)&p ) ;
  200.         } 
  201.         else 
  202.         {
  203.         EGB_putBlock(guiEgbPtr , 0, (char *)&p ) ;
  204.         }
  205.  
  206. if(ss==2) {    ff=ff*-1;    wait();    }
  207. if(ss==1) break;
  208.  
  209. int    data=1;
  210. do{
  211. data=1;
  212. MOS_rdpos(&ss,&xx,&yy);
  213. if(ss==1) break;
  214. if(ss==2) {    ff=ff*-1;    wait();    }
  215. if(xxx!=xx || yyy!=yy)    data=2;
  216. }while(data==1);
  217.  
  218. if(ss==1) break;
  219.  
  220.     if( modet == 1 )
  221.      {
  222.      EGB_putBlockColor(guiEgbPtr, 0, (char *)&gg ) ;
  223.      }
  224.      else
  225.       {
  226.       EGB_putBlock( guiEgbPtr , 0, (char *)&gg ) ;
  227.       }
  228.  
  229.   }while(ss!=1);
  230.  
  231. return 0 ;
  232. }
  233.  
  234.  
  235. void addat(char *fail, int i)
  236. {
  237. char    suux[10];
  238. char    suuy[10];
  239. char    spa[]=" ";
  240. char    lend[5];
  241. lend[0]=0x0a;    lend[1]='\0';
  242.  
  243. wdata2[i][0]='\0';
  244. strcat(wdata2[i],"/LOAD T ");
  245. strcat(wdata2[i],fail);
  246.  
  247. wzahyo[i][0]='\0';
  248. strcat(wzahyo[i],"/TIFF ");
  249. if(ff==1)
  250.     {
  251.     _itoa(xx,suux,10);
  252.     _itoa(yy,suuy,10);
  253.     }
  254. else    {
  255.     _itoa(xx-mx,suux,10);
  256.     _itoa(yy-my,suuy,10);
  257.     }
  258. strcat(wzahyo[i],suux);
  259. strcat(wzahyo[i],spa);
  260. strcat(wzahyo[i],suuy);
  261. }
  262.  
  263.  
  264.  
  265. void tiff(char    *fail, int i)
  266. {
  267. int    mojis,chg;
  268. int    l,error;
  269. gwsize = 512*1024 ;    
  270. char    lend[5];
  271. lend[0]=0x0a;    lend[1]='\0';
  272.  
  273. int    lot;
  274.  
  275. error=getpict(guiEgbPtr, gwsize, fail);
  276.     if(error==0)
  277.         {
  278.         printg();
  279.         addat(fail,i);
  280.         }
  281.     else    {
  282.         wdata2[i][0]=0x0d;    wdata2[i][1]=0x0a;
  283.         }
  284. }
  285.  
  286.  
  287.  
  288. int ldram(int x, int y)
  289. {
  290.         p.bp = gwork+strip ;
  291.         p.sel = 0x14 ;
  292.         p.sx = x ;
  293.         p.ex = x+mx -1 ;
  294.         p.sy = y;
  295.         p.ey = y+my -1 ;
  296.  
  297.         if( modet == 1 ) 
  298.         {
  299.         EGB_putBlockColor(guiEgbPtr, 0, (char *)&p ) ;
  300.         } 
  301.         else 
  302.         {
  303.         EGB_putBlock(guiEgbPtr , 0, (char *)&p ) ;
  304.         }
  305. }
  306.